1219
class Solution {
    boolean[][] flag;
    int m = 0;
    int n = 0;
    int max = 0;

    public int getMaximumGold(int[][] grid) {
        m = grid.length;
        n = grid[0].length;
        
        for (int i = 0; i  m; i++) {
            for (int j = 0; j  n; j++) {
                if (grid[i][j] != 0) {
                    flag = new boolean[m][n];
                    flag[i][j] = true;
                    fun(grid, i, j, grid[i][j]);
                }
            }
        }
        return max;
    }

    public void fun(int[][] grid, int x, int y, int tmp) {
        int row = x;
        int col = y;
        max = Math.max(max, tmp);

        row++;
        if (row  m && grid[row][col] != 0 && flag[row][col] == false) {
            flag[row][col] = true;
            fun(grid, row, col, tmp + grid[row][col]);
            flag[row][col] = false;
        }
        row -= 2;
        if (row = 0 && grid[row][col] != 0 && flag[row][col] == false) {
            flag[row][col] = true;
            fun(grid, row, col, tmp + grid[row][col]);
            flag[row][col] = false;
        }
        row++;
        col--;
        if (col = 0 && grid[row][col] != 0 && flag[row][col] == false) {
            flag[row][col] = true;
            fun(grid, row, col, tmp + grid[row][col]);
            flag[row][col] = false;
        }
        col += 2;
        if (col  n && grid[row][col] != 0 && flag[row][col] == false) {
            flag[row][col] = true;
            fun(grid, row, col, tmp + grid[row][col]);
            flag[row][col] = false;
        }
    }
}
链接：https://ac.nowcoder.com/acm/problem/14266
来源：牛客网

题目描述 
FST是一名可怜的小朋友，他很强，但是经常fst，所以rating一直低迷。
但是重点在于，他非常适合ACM！并在最近的区域赛中获得了不错的成绩。
拿到奖金后FST决定买一台新笔记本，但是FST发现，在价格能承受的范围内，笔记本的内存和速度是不可兼得的。
可是，有一些笔记本是被另外一些“完虐”的，也就是内存和速度都不高于另外某一个笔记本，现在FST想统计一下有多少笔记本被“完虐”。
输入描述:
第一行一个正整数n，
表示笔记本的数量。接下来n行，每行两个正整数Mi，Si表示这款笔记本的内存和速度。
n≤105,Mi,Si≤109
输出描述:
一行，一个正整数，表示被完虐的笔记本数。
import java.util.Scanner;
import java.util.Arrays;


class Conputer implements Comparable<Conputer>{
    long m;
    long s;
    public Conputer(long m, long s){
        this.m = m;
        this.s = s;
    }
    @Override
    public int compareTo(Conputer a){
        if (this.m > a.m){
            return 1;
        }else if (this.m < a.m){
            return -1;
        }else{
            return 0;
        }
    }
}

public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        
        int n = in.nextInt();
        Conputer[] conputer = new Conputer[n];
        for (int i = 0; i < n; i++){
            conputer[i] = new Conputer(in.nextLong(), in.nextLong());
        }
        Arrays.sort(conputer);
        long max = conputer[n-1].s;
        int count = 0;
        for (int j = n-2; j >= 0; j--){
            if (conputer[j].s < max){
                count++;
            }else{
                max = conputer[j].s;
            }
        }
        System.out.println(count);
    }
}